#include <AVUITAnimation.h>

namespace AVUI {

class PointAnimation : public TValueAnimation<Point>
{
public:

    PointAnimation();

    DECLARE_ELEMENT(PointAnimation, AnimationTimeline);
    DECLARE_DEPENDENCY_PROPERTY(By);
    Nullable<Point> get_By() { return AVUI::UnboxValue< Nullable<Point> >(GetValue(get_ByProperty())); }
    void set_By(const Nullable<Point>& value) { SetValue(get_ByProperty(), AVUI::BoxValue(value)); } 

    DECLARE_DEPENDENCY_PROPERTY(From);
    Nullable<Point> get_From() { return AVUI::UnboxValue< Nullable<Point> >(GetValue(get_FromProperty())); }
    void set_From(const Nullable<Point>& value) { SetValue(get_FromProperty(), AVUI::BoxValue(value)); } 

    DECLARE_DEPENDENCY_PROPERTY(To);
    Nullable<Point> get_To() { return AVUI::UnboxValue< Nullable<Point> >(GetValue(get_ToProperty())); }
    void set_To(const Nullable<Point>& value) { SetValue(get_ToProperty(), AVUI::BoxValue(value)); } 

    bool get_IsAdditive() { return AVUI::UnboxValue< bool >(GetValue(get_IsAdditiveProperty())); }
    void set_IsAdditive(bool value) { SetValue(get_IsAdditiveProperty(), AVUI::BoxValue(value)); } 

    bool get_IsCumulative() { return AVUI::UnboxValue< bool >(GetValue(get_IsCumulativeProperty())); }
    void set_IsCumulative(bool value) { SetValue(get_IsCumulativeProperty(), AVUI::BoxValue(value)); } 

private:

    static void StaticConstructor();
};

typedef TRefCountedPtr<PointAnimation> PointAnimationPtr;

}; // namespace AVUI
